package com.cf.crud.service;

import com.cf.crud.entity.BaseEntity;
import com.cf.exception.BizException;
import com.cf.vo.ResponseVo;
import com.github.pagehelper.PageInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * boot-crud-CloudApiService
 *
 * @author <a href="2428922347@qq.com">Zhu mingming</a>
 * @info
 * @since 2018/9/5 上午 11:53
 */

public interface CloudApiService<Entity extends BaseEntity> {

    /**
     * 创建
     *
     * @return
     */
    @PostMapping
    ResponseVo<Entity> create(@Validated @RequestBody Entity entity) throws BizException;


    //################################################################################
    //---------------------------------------删---------------------------------------
    //################################################################################

    /**
     * 删除
     *
     * @param id
     * @return
     */
    @DeleteMapping(value = "/{id}")
    ResponseVo<Integer> delete(@PathVariable("id") long id);

    //################################################################################
    //---------------------------------------改---------------------------------------
    //################################################################################

    /**
     * 更新
     *
     * @return
     */
    @PutMapping
    ResponseVo<PageInfo<Entity>> update(@Validated @RequestBody Entity entity);


    //################################################################################
    //---------------------------------------查---------------------------------------
    //################################################################################

    /**
     * 更具ID获取
     *
     * @param id
     * @return
     */
    @GetMapping(value = "/{id}")
    ResponseVo<Integer> get(@PathVariable("id") long id);

    /**
     * 条件检索
     *
     * @param params
     * @param page
     * @param size
     * @return
     */

    @PostMapping(value = "/search")
    ResponseVo<PageInfo<Entity>> search(
            @RequestBody Map<String, Object> params,
            @RequestParam(value = "page", defaultValue = "0") Integer page,
            @RequestParam(value = "size", defaultValue = "20") Integer size);

    /**
     * 条件检索
     *
     * @param params
     * @param page
     * @param size
     * @return
     */
    @GetMapping(value = "/search")
    ResponseVo<PageInfo<Entity>> searchByGet(
            @RequestParam Map<String, Object> params,
            @RequestParam(value = "page", defaultValue = "0") Integer page,
            @RequestParam(value = "size", defaultValue = "20") Integer size);

    /**
     * 分页获取
     *
     * @param page
     * @param size
     * @returnthiz.back();
     */

    @GetMapping
    ResponseVo<PageInfo<Entity>> getPage(
            @RequestParam(value = "page", defaultValue = "0") Integer page,
            @RequestParam(value = "size", defaultValue = "20") Integer size);

}
